<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>with和eval的使用</title>
  <!-- 
  在JavaScript中， `with` 和 `eval` 都是特殊的语句，它们可以用来简化代码或执行动态代码，但它们的使用也有一定的风险和限制。以下是对这两者的总结说明：
  一、 `with`  语句
   1. 定义
  `with`  语句用于扩展一个对象的作用域，使得在该作用域内可以直接访问对象的属性，而不必每次都使用对象名。

   2. 语法
  with (object) {
      // 代码块
  }
   3. 示例
  const obj = {
      a: 1,
      b: 2,
      c: 3
  };

  with (obj) {
      console.log(a + b + c); // 输出: 6
  }
   4. 注意事项
  - 可读性：使用  `with`  可能会降低代码的可读性，因为它会改变作用域，导致代码的行为不易理解。
  - 性能问题：某些JavaScript引擎在使用  `with`  时可能会降低性能，因为它需要在每次访问属性时查找对象。
  - 不推荐使用：由于上述原因， `with`  语句在严格模式下被禁用，并且在现代JavaScript开发中不推荐使用。

  二、 `eval`  函数
   1. 定义
  `eval`  是一个全局函数，用于将字符串作为JavaScript代码执行。它可以执行任意的JavaScript代码，包括变量声明、表达式和函数定义。

   2. 语法
  eval(string);
   3. 示例
  const x = 10;
  const y = 20;
  const result = eval('x + y'); // 计算字符串表达式
  console.log(result); // 输出: 30
   4. 注意事项
  - 安全性问题： `eval`  可以执行任何代码，这可能导致安全隐患，尤其是当字符串内容来自不可信的来源时。
  - 性能问题：使用  `eval`  会导致性能下降，因为它需要在运行时解析和执行代码。
  - 调试困难：通过  `eval`  执行的代码在调试时可能不易追踪，导致错误的排查变得更加复杂。
  - 不推荐使用：由于安全性和性能问题， `eval`  的使用在现代JavaScript中也不推荐。

  三、总结
  -  `with`  语句：用于扩展对象的作用域，降低了代码的可读性和性能，且在严格模式下被禁用，现代开发中不推荐使用。
  -  `eval`  函数：用于执行字符串形式的JavaScript代码，存在安全性和性能隐患，现代开发中也不推荐使用。

   -->
</head>
<body>

  <script>
    // 1. with 语句
    const obj = {
        a: 1,
        b: 2,
        c: 3
    };

    with (obj) {
        console.log(a + b + c); // 输出: 6
    }
    
    // 2. eval 函数
    const x = 10;
    const y = 20;
    const result = eval('x + y'); // 计算字符串表达式
    console.log(result); // 输出: 30

    var message = "Hello World"
    var codeString = `var name = "eval"; console.log(name); console.log(message); "abc";`
    var result2 = eval(codeString)
    console.log(result2)

  </script>
  
</body>
</html>